dfs and similar dp graphs

Please click on ads to support us..

C++ Code:

#include<iostream>
#include<map>
#include<vector>
#include<cstring>
#include<unordered_set>
#include<unordered_map>
using namespace std;
const static int N=1e5+5;
long long dp[N][3];
int mod=998244353;
vector<pair<int,int>> edge[N];
bool vis[N];
long long cnt1=0;
long long ans=0; 

void dfs(int u){
//     long long tmp1=0;
    for(auto &pp:edge[u]){
        if(!vis[pp.first])
            dfs(pp.first);
//         if(pp.second)tmp1++;
        dp[u][1] = (dp[u][1] + (pp.second))%mod;
        dp[u][2] = ((dp[u][2]+ dp[pp.first][2])%mod + (dp[pp.first][0] + (pp.second == 0))*dp[u][1]%mod)%mod;
        dp[u][0] = ((dp[u][0] +dp[pp.first][0])%mod + (pp.second==0))%mod;
        dp[u][1] = ((dp[u][1] +dp[pp.first][1])%mod)%mod;
        
//         tmp1=(dp[pp.first][1]+tmp1)%mod;
    }
    vis[u] = true;
}
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int m;
        int a,b;
        cin>>m;
        for(int j=0;j<m;j++){
            cin>>a>>b;
            edge[i].push_back({a,b});
        }
    }
    dfs(1);
    cout<<dp[1][2];

    
}
    


Comments

Submit
0 Comments
More Questions

1271A - Suits
259B - Little Elephant and Magic Square
1389A - LCM Problem
778A - String Game
1382A - Common Subsequence
1512D - Corrupted Array
667B - Coat of Anticubism
284B - Cows and Poker Game
1666D - Deletive Editing
1433D - Districts Connection
2B - The least round way
1324A - Yet Another Tetris Problem
246B - Increase and Decrease
22E - Scheme
1566A - Median Maximization
1278A - Shuffle Hashing
1666F - Fancy Stack
1354A - Alarm Clock
1543B - Customising the Track
1337A - Ichihime and Triangle
1366A - Shovels and Swords
919A - Supermarket
630C - Lucky Numbers
1208B - Uniqueness
1384A - Common Prefixes
371A - K-Periodic Array
1542A - Odd Set
1567B - MEXor Mixup
669A - Little Artem and Presents
691B - s-palindrome